# -*- coding: utf-8 -*-
# 姓名:谚语
# 开发时间:2022/10/30 9:23
from flask import g
from flask_restful import Resource
from flask_restful.reqparse import RequestParser

from comment.modules import db
from comment.modules.deal_record import DealRecord
from comment.modules.user import User
from financial.resources.transaction.seralizer import DealRecordPaginateSerializer


class Deal_Resource(Resource):
    """交易记录的资源类"""

    def get(self):
        """交易记录的列表"""
        rp = RequestParser()
        rp.add_argument('start')  # 起始时间
        rp.add_argument('end')  # 结束时间
        rp.add_argument('deal_type')  # 交易类型 初始值为0，0：全部
        rp.add_argument('curPage', required=True)  # 当前页号
        rp.add_argument('per_page', required=True)  # 每页显示的条数

        args = rp.parse_args()
        start = args.get('start')
        end = args.get('end')
        deal_type = 0 if args.get('deal_type') == None else int(args.get('deal_type'))
        cur_page = int(args.get('curPage'))
        page_size = int(args.get('per_page'))

        user_id = g.user_id
        user = User.query.filter(User.id == user_id).first()
        # 得到一个查询对象
        q = DealRecord.query
        # 第一个过滤：根据交易的类型来过滤
        if deal_type > 0:
            q = q.filter(DealRecord.aType == deal_type)
        # 第二个过滤：根据用户ID(当前用户如果是管理员，可以查询所有的，否则只能查询自己的)
        if user.role == 0:  # 判断是否管理员 0是普通用户
            q = q.filter(DealRecord.aUserId == user_id)
        # 第三个过滤：根据起始时间和结束时间(得到时间区间)
        if start and end:
            # .cast(转换的数据, 转换的类型) 做类型转换
            q = q.filter(db.cast(DealRecord.aDate, db.DATE) >= db.cast(start, db.DATE)) \
                .filter(db.cast(DealRecord.aDate, db.DATE) <= db.cast(end, db.DATE))

        # 分页    .paginate(当前页, 一页显示多少条数据, 没有下一页或上一页时是否报错)
        data = q.paginate(cur_page, page_size, error_out=False)

        # 序列化(也就是转换成字典类型数据)  .to_dict()将JSON数据转换成字典类型数据
        data = DealRecordPaginateSerializer(data).to_dict()

        return {'msg': 'success', 'data': data}
